package com.marvels.financial.pay.ybpay;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import com.marvels.common.constants.PayContants;
import com.marvels.common.utils.MarvelsLogUtil;
import com.marvels.common.utils.ServerProperties;

/**
 * 
 * @ClassName: YbPayService 
 * @Description:易宝支付基础类，调用的接口进行封装原子接口  
 * 这个类新增易宝接口的时候要注意，appKey的生成方式是不同的（代扣相关接口"SQKK"+merchantno,代付相关接口"OPR:"+merchantno）
 * @author 李瑶
 * @date 2018年10月6日 下午4:19:40 
 *
 */
@Component
public class YbPayService {


	private static String configPropertiesPath;

	@Value("${config.properties.path}")
	public void setConfigPropertiesPath(String configPropertiesPath) {
		this.configPropertiesPath = configPropertiesPath;
	}

	private static  MarvelsLogUtil logger = MarvelsLogUtil.getInstance();

	/**
	 * 
	 * @Title: preBindCard 
	 * @Description:发送绑卡请求（即预绑卡，发送短信验证码）    
	 * @param requestno 请求号
	 * @param bankCardNo 银行卡号
	 * @param idno 身份证号码
	 * @param userName 用户姓名
	 * @param phone 手机号码
	 * @return       
	 * @author 李瑶
	 * @date 2018年10月6日 下午5:33:19
	 */
	public static Map<String,Object> preBindCard(String requestNo,String bankCardNo,String idno,
			String  userName,String phone){
		String merchantNo  = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold");
		String appKey = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold.appkey");

		Map<String, String> param = new HashMap<String,String>();
		param.put("merchantno", merchantNo);
		param.put("requestno", requestNo);
		param.put("identityid", idno);
		param.put("identitytype", "ID_CARD");
		param.put("cardno", bankCardNo);
		param.put("idcardno", idno);
		param.put("idcardtype", "ID");
		param.put("username", userName);
		param.put("phone", phone);
		param.put("issms", "true");
		param.put("requesttime", Api.getDateStr());
		param.put("authtype", "COMMON_FOUR");
		return Api.ybPost(param, "/rest/v1.0/paperorder/unified/auth/request",appKey);
	}


	/**
	 * 
	 * @Title: bindCard 
	 * @Description:  
	 * @param requestNo 预绑卡的请求编号
	 * @param validateCode 验证码
	 * @return       
	 * @author 李瑶
	 * @date 2018年10月6日 下午5:37:49
	 */
	public static Map<String,Object> bindCard(String requestNo,String validateCode){
		String merchantNo  = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold");
		String appKey = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold.appkey");
		Map<String, String> param = new HashMap<String,String>();
		param.put("merchantno", merchantNo);
		param.put("requestno", requestNo);
		param.put("validatecode", validateCode);
		return Api.ybPost(param, "/rest/v1.0/paperorder/auth/confirm",appKey);
	}

	/**
	 * 
	 * @Title: preBindCardAgain 
	 * @Description: 重新发送预绑卡短信 
	 * @param requestNo 上一次预绑卡生成的唯一请求编码
	 * @param advicesmstype MESSAGE：短信方式 VOICE：语音方式
	 * @return       
	 * @author 李瑶
	 * @date 2018年10月6日 下午5:40:33
	 */
	public static Map<String,Object> preBindCardAgain(String requestNo,String advicesmstype){
		String merchantNo  = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold");
		String appKey = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold.appkey");
		Map<String, String> param = new HashMap<String,String>();
		param.put("merchantno", merchantNo);
		param.put("requestno", requestNo);
		param.put("advicesmstype", advicesmstype);
		return Api.ybPost(param, "/rest/v1.0/paperorder/auth/resend",appKey);
	}

	/**
	 * 
	 * @Title: queryBindCardRecord 
	 * @Description: 绑卡鉴权记录查询 
	 * @param requestno 请求编号（两参数不能都为空）
	 * @param yborderid 易宝返回编号（两参数不能都为空）
	 * @return       
	 * @author 李瑶
	 * @date 2018年10月6日 下午5:44:45
	 */
	public static Map<String,Object> queryBindCardRecord(String requestNo,String ybOrderId){
		String merchantNo  = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold");
		String appKey = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold.appkey");
		Map<String, String> param = new HashMap<String,String>();
		param.put("merchantno", merchantNo);
		param.put("requestno", requestNo);
		param.put("advicesmstype", ybOrderId);
		return Api.ybPost(param, "/rest/v1.0/paperorder/auth/query",appKey);
	} 


	/**
	 * 
	 * @Title: bindCardNoMessage 
	 * @Description:无感签约（不用发送短信，直接签约）  
	 * @param requestNo 请求唯一编号
	 * @param bankCardNo 银行卡号
	 * @param idno 身份证
	 * @param userName 姓名
	 * @param phone 手机号码
	 * @return       
	 * @author 李瑶
	 * @date 2018年10月6日 下午5:48:56
	 */
	public static Map<String,Object> bindCardNoMessage(String requestNo,String bankCardNo,String idno,
			String  userName,String phone){
		String merchantNo  = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold");
		String appKey = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold.appkey");
		Map<String, String> param = new HashMap<String,String>();
		param.put("merchantno", merchantNo);
		param.put("requestno", requestNo);
		param.put("identityid", idno);

		param.put("identitytype", "ID_CARD");
		param.put("cardno", bankCardNo);
		param.put("idcardno", idno);
		param.put("idcardtype", "ID");
		param.put("username", userName);
		param.put("phone", phone);
		param.put("requesttime", Api.getDateStr());
		return Api.ybPost(param, "/rest/v1.0/paperorder/nonperceived/auth/request",appKey);
	} 

	/**
	 * 
	 * @Title: queryUserBindedList 
	 * @Description:查询客户绑卡列表（已成功绑定的卡）  
	 * @param idNo
	 * @return       
	 * @author 李瑶
	 * @date 2018年10月6日 下午5:54:26
	 */
	public static Map<String,Object> queryUserBindedList(String idNo){
		String merchantNo  = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold");
		String appKey = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold.appkey");
		Map<String, String> param = new HashMap<String,String>();
		param.put("merchantno", merchantNo);
		param.put("identityid", idNo);
		param.put("identitytype", "ID_CARD");
		return Api.ybPost(param, "/rest/v1.0/paperorder/auth/bindcard/list",appKey);
	} 


	/**
	 * 
	 * @Title: queryBindedInfo 
	 * @Description: 查询银行卡信息 
	 * @param bankCardNo 银行卡号
	 * @return       
	 * @author 李瑶
	 * @date 2018年10月6日 下午6:41:19
	 */
	public static Map<String,Object> queryBankCardInfo(String bankCardNo){
		String merchantNo  = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold");
		String appKey = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold.appkey");
		Map<String, String> param = new HashMap<String,String>();
		param.put("merchantno", merchantNo);
		param.put("cardno", bankCardNo);
		return Api.ybPost(param, "/rest/v1.0/paperorder/temppay/bankcardrecord",appKey);
	} 


	/**
	 * 
	 * @Title: unbind 
	 * @Description:解绑  
	 * @param idno
	 * @param bankCardNo
	 * @return       
	 * @author 李瑶
	 * @date 2018年10月6日 下午6:46:59
	 */
	public static Map<String,Object> unbind(String idno,String bankCardNo){
		String merchantNo  = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold");
		String appKey = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold.appkey");
		Map<String, String> param = new HashMap<String,String>();
		param.put("merchantno", merchantNo);
		param.put("identityid", idno);
		param.put("identitytype", "ID_CARD");
		param.put("cardtop", bankCardNo.substring(0,4));
		param.put("cardlast", bankCardNo.substring(bankCardNo.length()-4));
		return Api.ybPost(param, "/rest/v1.0/paperorder/unbind/request",appKey);
	}

	/**
	 * 
	 * @Title: Withhold 
	 * @Description:代扣 
	 * @param type 0发送短信验证码 1不发送短信验证码
	 * @param requestNo 请求编号
	 * @param idno 身份证号码
	 * @param bankCardNo 银行卡号
	 * @param amount 金额 精确到小数点后两位
	 * @param title 扣款的商品名称
	 * @param callbackurl 回调通知地址
	 * @return       
	 * @author 李瑶
	 * @date 2018年10月6日 下午6:54:57
	 */
	public static Map<String,Object> withhold(String type,String requestNo,String idno,String bankCardNo,String amount,
			String title){
		String merchantNo  = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold");
		String callback  = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.withhold.callback");
		String appKey = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold.appkey");
		String terminalno  = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.withhold.terminalno");
		Map<String, String> param = new HashMap<String,String>();
		param.put("merchantno", merchantNo);
		param.put("requestno", requestNo);
		String issms = "0".equals(type) ? "true" : "false";
		param.put("issms", issms);
		param.put("identityid", idno);
		param.put("identitytype", "ID_CARD");
		param.put("cardtop", bankCardNo.substring(0,6));
		param.put("cardlast", bankCardNo.substring(bankCardNo.length()-4));
		param.put("amount", amount);
		param.put("productname", title);
		param.put("requesttime", Api.getDateStr());
		param.put("callbackurl", callback);
		//SQKKSCENE10 代扣 SQKKSCENEKJ010 快捷
		param.put("terminalno", terminalno);
		return Api.ybPost(param, "/rest/v1.0/paperorder/unified/pay",appKey);
	}


	/**
	 * 
	 * @Title: WithholdSendMsgAgain 
	 * @Description:发起代扣发验证码的方式，需要重新发送验证码  
	 * @param requestNo
	 * @return       
	 * @author 李瑶
	 * @date 2018年10月6日 下午7:08:32
	 */
	public static Map<String,Object> withholdSendMsgAgain(String requestNo){
		String merchantNo  = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold");
		String appKey = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold.appkey");
		Map<String, String> param = new HashMap<String,String>();
		param.put("merchantno", merchantNo);
		param.put("requestno", requestNo);
		return Api.ybPost(param, "/rest/v1.0/paperorder/pay/resend",appKey);
	}

	/**
	 * 
	 * @Title: WithholdConfirm 
	 * @Description: 如 Withhold方法采用发送短信的模式，则用这个接口，验证短信验证码，并发起扣款 
	 * @param requestNo 请求编号
	 * @param validateCode 验证码
	 * @return       
	 * @author 李瑶
	 * @date 2018年10月6日 下午7:05:02
	 */
	public static Map<String, Object> withholdConfirm(String requestNo,String validateCode){
		String merchantNo  = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold");
		String appKey = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold.appkey");
		Map<String, String> param = new HashMap<String,String>();
		param.put("merchantno", merchantNo);
		param.put("requestno", requestNo);
		param.put("validatecode", validateCode);
		return Api.ybPost(param, "/rest/v1.0/paperorder/pay/confirm",appKey);
	}


	/**
	 * 
	 * @Title: queryWithholdResult 
	 * @Description: 查询代扣结果 
	 * @param requestNo 请求编号
	 * @param ybOrderId 易宝订单号
	 * @return       
	 * @author 李瑶
	 * @date 2018年10月6日 下午7:11:25
	 */
	public static Map<String, Object> queryWithholdResult(String requestNo,String ybOrderId){
		String merchantNo  = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold");
		String appKey = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold.appkey");
		Map<String, String> param = new HashMap<String,String>();
		param.put("merchantno", merchantNo);
		param.put("requestno", requestNo);
		param.put("yborderid", ybOrderId);
		return Api.ybPost(param, "/rest/v1.0/paperorder/api/pay/query",appKey);
	}
	
	/**
	 * 
	* @Title: withholdRollback 
	* @Description:  
	* @param requestNo 请求号
	* @param ybOrderId 易宝返回标号
	* @param amount 退款金额
	* @param requestTime 请求时间
	* @return       
	* @author 李瑶
	* @date 2018年10月31日 上午9:59:08
	 */
	public static Map<String, Object> withholdRollback(String requestNo,String ybOrderId,String amount,String requestTime){
		String merchantNo  = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold");
		String appKey = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold.appkey");
		Map<String,String> map=new HashMap<String,String>();
	    map.put("merchantno", merchantNo);
	    map.put("requestno", requestNo);
	    map.put("paymentyborderid", ybOrderId);
	    map.put("amount", amount);
	    map.put("callbackurl", "");
	    map.put("requesttime", requestTime);
	    map.put("remark", "");
		return Api.ybPost(map, "/rest/v1.0/paperorder/api/refund/request",appKey);
	}

	/**
	 * 
	 * @Title: unionFirstPay 
	 * @Description: 统一支付接口，绑卡、代扣放在一起
	 * 场景：
	 * 1.批量导入用户
	 * 2.商户备份路由
	 * 3.投资人投标
	 * 4.借款人主动还款 
	 * @param type 0发送短信验证码 1不发送短信验证码
	 * @param requestNo
	 * @param idno
	 * @param bankCardNo
	 * @param userName
	 * @param phone
	 * @param amount
	 * @param callbackurl 回调通知地址,没有时传空
	 * @return       
	 * @author 李瑶
	 * @date 2018年10月6日 下午7:22:27
	 */
	public static Map<String, Object> unionFirstPay(String type,String requestNo,String idno,String bankCardNo,String userName,
			String phone,String amount,String callbackurl){
		String merchantNo  = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold");
		String appKey = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold.appkey");
		Map<String,String> map	=	new HashMap<String,String>();
		map.put("merchantno", merchantNo);
		map.put("requestno", requestNo);
		map.put("identityid", idno);
		map.put("identitytype", "ID_CARD");
		map.put("cardno", bankCardNo);
		map.put("idcardno", idno);
		map.put("idcardtype", "ID");
		map.put("username", userName);
		map.put("phone", phone);
		map.put("amount", amount);
		map.put("authtype", "COMMON_FOUR");
		String issms = "0".equals(type) ? "true" : "false";
		map.put("issms", issms);
		map.put("issms", callbackurl);
		map.put("requesttime", Api.getDateStr());
		map.put("terminalno","SQKKSCENE10" );
		return Api.ybPost(map, "/rest/v1.0/paperorder/unified/firstpay",appKey);

	}

	/**
	 * 
	 * @Title: unionFirstPayConfirm 
	 * @Description: 统一支付接口发送验证时，调用这个接口 
	 * @param requestNo
	 * @param validateCode
	 * @return       
	 * @author 李瑶
	 * @date 2018年10月6日 下午7:28:04
	 */
	public static Map<String, Object> unionFirstPayConfirm(String requestNo,String validateCode){
		String merchantNo  = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold");
		String appKey = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold.appkey");
		Map<String, String> param = new HashMap<String,String>();
		param.put("merchantno", merchantNo);
		param.put("requestno", requestNo);
		param.put("validatecode", validateCode);
		return Api.ybPost(param, "/rest/v1.0/paperorder/firstpayorder/confirm",appKey);
	}

	/**
	 * 
	 * @Title: unionFirstPaySendAgain 
	 * @Description:  首次支付重发验证码
	 * @param requestNo
	 * @return       
	 * @author 李瑶
	 * @date 2018年10月6日 下午7:29:33
	 */
	public static Map<String, Object> unionFirstPaySendAgain(String requestNo){
		String merchantNo  = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold");
		String appKey = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold.appkey");
		Map<String, String> param = new HashMap<String,String>();
		param.put("merchantno", merchantNo);
		param.put("requestno", requestNo);
		return Api.ybPost(param, "/rest/v1.0/paperorder/firstpayorder/resend",appKey);
	}


	/**
	 * 
	 * @Title: queryUnionFirstPayResult 
	 * @Description: 统一首次支付，结果查询 
	 * @param requestNo
	 * @param ybOrderId
	 * @return       
	 * @author 李瑶
	 * @date 2018年10月6日 下午7:32:06
	 */
	public static Map<String, Object> queryUnionFirstPayResult(String requestNo,String ybOrderId){
		String merchantNo  = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold");
		String appKey = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.withhold.appkey");
		Map<String, String> param = new HashMap<String,String>();
		param.put("merchantno", merchantNo);
		param.put("requestno", requestNo);
		param.put("yborderid", ybOrderId);

		return Api.ybPost(param, "/rest/v1.0/paperorder/firstpayorder/query",appKey);
	}

	/**
	 * 
	* @Title: paySignal 
	* @Description: 单笔代付  
	* @param amount 金额 	小数点后两位
	* @param accountName 账户名称（姓名）
	* @param bankCardNo 银行账号
	* @param bankCode 银行编码
	* @param bankName 银行全称
	* @param bankBranchName 支行名称(对公、 对私除去: 招商、 深圳发展、 北
	*								京、 平安、 工商、 交通、 中国、 建设、 兴
	*								业、 农业、 民生、 中信、 华夏、 上海
	*								浦东发展、 邮政储蓄， 其他银行支行必填
	*								写)
	* @param provinceCode 收款银行省编码(对公、 对私除去: 招商、 深圳发展、 北
	*									京、 平安、 工商、 交通、 中国、 建设、 兴
	*									业、 农业、 民生、 中信、 华夏、 上海
	*									浦东发展、 邮政储蓄， 其他银行 支行必
	*									填写)
	* @param cityCode 收款银行城市编码(对公、 对私除去: 招商、 深圳发展、 北
	*								京、 平安、 工商、 交通、 中国、 建设、 兴
	*								业、 农业、 民生、 中信、 华夏、 
	*								浦东发展、 邮政储蓄， 其他银行 支行必
	*								填写)
	* @param feeType 手续费方式    “SOURCE” 商户承担    “TARGET” 用户承担
	* @return       
	* @author 李瑶
	* @date 2018年10月9日 下午5:50:26
	 */
	public static Map<String, Object> paySignal(String batchNumber,String orderNumber,String amount,String accountName,String bankCardNo,String bankCode,
			String bankName,String bankBranchName,String provinceCode,String cityCode,String feeType){
		String merchantNo  = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.pay");
		String appKey = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.pay.appkey");
		Map<String, String> params = new HashMap<String,String>();
		params.put("customerNumber", merchantNo);
		params.put("groupNumber", merchantNo);
		params.put("batchNo", batchNumber);
		params.put("orderId", orderNumber);
		params.put("amount", amount);
		params.put("accountName", accountName);
		params.put("accountNumber", bankCardNo);
		params.put("bankCode", bankCode);
		params.put("bankName", bankName);
		params.put("bankBranchName", bankBranchName);
		params.put("provinceCode", provinceCode);
		params.put("cityCode", cityCode);
		params.put("feeType", feeType);
		//0非加急 1加急
		params.put("urgency", "1");
		
		
		MarvelsLogUtil.getInstance().info("paySignal---param="+params.toString());
		Map<String, Object> returnMap = Api.ybPost(params, "/rest/v1.0/balance/transfer_send",appKey);
		MarvelsLogUtil.getInstance().info("paySignal---return="+returnMap.toString());
		return returnMap;
	}
	
	/**
	 * 
	* @Title: queryPayResult 
	* @Description:查询放款结果  
	* @param batchNumber 批次号
	* @param orderNumbers 订单号列表
	* @param product 为空走委托结算出款；值为“RJT” 走日结通出款
	* @return       
	* @author 李瑶
	* @date 2018年10月9日 下午7:49:33
	 */
	public static Map<String, Object> queryPayResult(String batchNumber,List<String> orderNumbers){
		String merchantNo  = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.pay");
		String appKey = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.pay.appkey");
		String orderNumber = join(",", orderNumbers.iterator());
		Map<String, String> params = new HashMap<>();
		params.put("customerNumber", merchantNo);
		params.put("batchNo", batchNumber);
		params.put("product", "");
		params.put("orderId", orderNumber);
		MarvelsLogUtil.getInstance().info("==========queryPayResult---param="+params.toString());
		Map<String, Object> returnMap = Api.ybPost(params, "/rest/v1.0/balance/transfer_query",appKey);
		MarvelsLogUtil.getInstance().info("==========queryPayResult---return="+returnMap.toString());
		return returnMap;
	}
	
	/**
	 * 
	* @Title: queryMerchantBalance 
	* @Description: 查询账户余额 
	* @return       
	* @author 李瑶
	* @date 2018年10月9日 下午7:52:26
	 */
	public static Map<String, Object> queryMerchantBalance(){
		String merchantNo  = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.pay");
		String appKey = ServerProperties.getValue(configPropertiesPath, "common.properties", "yb.merchantno.pay.appkey");
		Map<String, String> params = new HashMap<>();
        params.put("customerNumber", merchantNo);

		return Api.ybPost(params, "/rest/v1.0/balance/query_customer_amount",appKey);
	}
	
	
	
	
	
	/**
	 * 把迭代对象转化为一个字符串
	 *
	 * @param seperator 分隔符
	 * @param objects   迭代器对象
	 * @return 字符串
	 */
	public static String join(String seperator, Iterator objects)
	{
		StringBuffer buf = new StringBuffer();
		if (objects.hasNext())
		{
			buf.append(objects.next());
		}
		while (objects.hasNext())
		{
			buf.append(seperator).append(objects.next());
		}
		return buf.toString();
	}
	
	
	/**
	 * 
	 * @Title: getReuqestNum 
	 * @Description:生成唯一请求编号  
	 * @return       
	 * @author 李瑶
	 * @date 2018年10月9日 上午10:48:54
	 */
	public static String getReuqestNum(String channel){
		SimpleDateFormat sb = new SimpleDateFormat("yyyyMMddHHmmssSSS");
		UUID.randomUUID().toString().replace("-", "").substring(0, 5);
		Date date = new Date();
		String requestNo = sb.format(date)+UUID.randomUUID().toString().replace("-", "").substring(0, 5)+channel;
		return requestNo;

	}
	
	/**
	 * 
	 * @Title: getReuqestNum 
	 * @Description:生成唯一请求编号 (数字) 
	 * @return       
	 * @author 李瑶
	 * @date 2018年10月9日 上午10:48:54
	 */
	public static String getBatchId(){
		String base = "0123456789";
		SimpleDateFormat sb = new SimpleDateFormat("yyyyMMddHHmmssSSS");
		String batchId = sb.format(new Date());
        Random random = new Random();  
        StringBuffer sf = new StringBuffer();  
        for (int i = 0; i < 2; i++) {
            int number = random.nextInt(base.length());  
            sf.append(base.charAt(number));  
        }
		return batchId+sf.toString();

	}

	public static void main(String[] args) {
		
	}

}
